#include "RBTree.hpp"

namespace Su
{
    template <class K, class V>
    class Map
    {
    public:
        struct MapofKey
        {
            const K& operator()(const pair<K, V>& node)
            {
                return node.first;
            }
        };

        Map()
        {}
        typedef typename RBTree<K, pair<const K, V>, MapofKey>::iterator Iterator;
        typedef typename RBTree<K, pair<const K, V>, MapofKey>::const_iterator const_Iterator;
        
        pair<Iterator,bool> insert(const pair<K,V>& data)
        {
            return _t.insert(data);
        }
        bool IsMap()
        {
            return _t.IsBanlance();
        }

        Iterator begin()
        {
            return _t.begin();
        }
        Iterator end()
        {
            return _t.end();
        }
        V& operator[](const K& key)
        {
            //没有的话就插入，有的话就返回已经有的值
            pair<Iterator, bool> ret = insert(make_pair(key, V()));

            return ret.first->second;
            // ret.first->->second
            //ret.first是一个迭代器类型，其中有运算符重载->，会让迭代器返回一个Node里的data的地址(data*)
            //此时data*再直接指向second，就是指向data的second  ==>  data->second
            //编译器自动忽略第二个->
        }

    private:
        RBTree<K, pair<const K, V>, MapofKey> _t;
    };
}
